home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Languguage OS 2
/
Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO
/
a_utils
/
perl
/
prlbkxmp.lha
/
ch2
/
pigeons
< prev
next >
Wrap
Text File
|
1991-01-07
|
2KB
|
57 lines
#!/usr/bin/perl
# We put any configuration constants here in front. It helps
# to capitalize them for visibility later in the program.
$RECLEN = 8;
# Note how we can assign a list of pairs to an entire
# associative array in order to initialize it.
%fullname = (
'sh', 'sheep',
'ca', 'camels',
'ox', 'oxen',
'do', 'donkeys',
'so', 'sons',
'da', 'daughters',
);
# Open the files (devices, in this case).
open(PCTR, "</dev/pctr")
|| die "Couldn't open pigeon's clay tablet reader: $!\n";
open(PCTW, ">/dev/pctw")
|| die "Couldn't open pigeon's clay tablet writer: $!\n";
# Main loop. This loop runs till last pigeon brings EOF tablet.
for ($recnum = 0; read(PCTR, $record, $RECSIZE); $recnum++) {
# Break apart the record into its fields.
($beastie, $count) = unpack("A2 A6", $record);
# Add the count into the proper associative array entry.
# Note that $count may be negative, in which case the
# entry is decreased by the += operator.
$count{$beastie} += $count;
# Print out the acknowledgement for the return pigeon.
# Instead of sending a count back, we send back the record
# number, for the beastie keepers to check off as received.
# $newrec is guaranteed to be exactly 8 bytes long.
$newrec = pack("A2 A6", $beastie, $recnum);
print PCTW $newrec;
}
# End-of-Day processing. We translate the abbreviated beastie
# name back to the full name to print it out, along with the
# accumulated count for the day.
foreach $key (sort keys(%count)) {
printf "%-20s %d\n", $fullname{$key}, $count{$key};
}